#ifndef __ZW101_C
#define __ZW101_C

#include "zw101.h"

void zw101_pin_init(){
	  GPIO_Config_T     configStruct;
	  #if finger_sensor_type == Finger_HLK_ZW101_EINT
	  EINT_Config_T     EINT_configStruct;
	  #endif

    RCM_EnableAPB2PeriphClock(ZW101_RCM);
	  //浮空输入
    configStruct.mode = GPIO_MODE_IN_FLOATING; 
    configStruct.pin  = ZW_TouchOut_PinId;	  
    GPIO_Config(ZW101_PinPort, &configStruct);
	
	  #if finger_sensor_type == Finger_HLK_ZW101_EINT
	  // 外部中断初始化
	  RCM_EnableAPB2PeriphClock(ZW101_RCM_EINT);
    GPIO_ConfigEINTLine(ZW101_EintPort, ZW101_EintPin);
    // 配置外部中断  
    EINT_configStruct.line = ZW101_EintLine;
    EINT_configStruct.mode = EINT_MODE_INTERRUPT;
	  EINT_configStruct.trigger = EINT_TRIGGER_RISING; //上升沿
    EINT_configStruct.lineCmd = ENABLE;
    EINT_Config(&EINT_configStruct);
		#endif
		
		#ifdef SYS_DEBUG
		printf("   zw101_pin_init   \r\n");
		#endif
		
}


// 活体检测：1 = 活体检测为真
uint8_t zw101_TouchOut_get_level(void){	  
	  return GPIO_ReadInputBit(ZW101_PinPort, ZW_TouchOut_PinId);
}

#if finger_sensor_type == Finger_HLK_ZW101_EINT
// 活体检测中断开启
void zw101_EINT_start(){	
    //这里的初始化，只是改变上面修改过的参数，其余的不变  
	  NVIC_EnableIRQRequest(ZW101_Eint_IRQn, 3, 3);
}
#endif

// 发送指令
void finger_sendCmd(uint8_t cmdStr){
    uint16_t  cmdLen = 0; 
	  //uint16_t  i = 0;
    fingerCtrl.fingerCMD = cmdStr;
	  // 先赋值为0
	  arrAllIs('\0',uart4Ctrl.uartTxDatas,txBuf4_size);
	  // 填装数据
	  uart4Ctrl.uartTxDatas[0] = Finger_Header_H;
	  uart4Ctrl.uartTxDatas[1] = Finger_Header_L;	  	  
	  uart4Ctrl.uartTxDatas[2] = ZW_Device_Addr0;
	  uart4Ctrl.uartTxDatas[3] = ZW_Device_Addr1;
	  uart4Ctrl.uartTxDatas[4] = ZW_Device_Addr2;
	  uart4Ctrl.uartTxDatas[5] = ZW_Device_Addr3;
	  uart4Ctrl.uartTxDatas[6] = Flag_CMD;
    if(cmdStr == PS_ReadSysPara){
			  // 获取指纹系统信息
			  fingerCtrl.finger_package_len.shortData = 3;
			  uart4Ctrl.uartTxDatas[7] = fingerCtrl.finger_package_len.charArrData[1];
			  uart4Ctrl.uartTxDatas[8] = fingerCtrl.finger_package_len.charArrData[0];
			  uart4Ctrl.uartTxDatas[9] = PS_ReadSysPara;
		}	else if (cmdStr == PS_AutoEnroll){
			  // 注册指纹
			  uint8_t recodeTimes = finger_reg_times; // 录入次数
			  fingerCtrl.finger_package_len.shortData = 8;
			  uart4Ctrl.uartTxDatas[7] = fingerCtrl.finger_package_len.charArrData[1];
			  uart4Ctrl.uartTxDatas[8] = fingerCtrl.finger_package_len.charArrData[0];
			  uart4Ctrl.uartTxDatas[9] = PS_AutoEnroll;
			  uart4Ctrl.uartTxDatas[10] = fingerCtrl.finger_id.charArrData[1];
			  uart4Ctrl.uartTxDatas[11] = fingerCtrl.finger_id.charArrData[0];
			  uart4Ctrl.uartTxDatas[12] = recodeTimes;
			  uart4Ctrl.uartTxDatas[13] = finger_reg_param_H;
        uart4Ctrl.uartTxDatas[14] = finger_reg_param_L;
		} else if(cmdStr == PS_AutoIdentify){
			  // 自动搜索验证指纹
			  fingerCtrl.finger_package_len.shortData = 8;
			  uart4Ctrl.uartTxDatas[7]  = fingerCtrl.finger_package_len.charArrData[1];
			  uart4Ctrl.uartTxDatas[8]  = fingerCtrl.finger_package_len.charArrData[0];
			  uart4Ctrl.uartTxDatas[9]  = PS_AutoIdentify;
			  uart4Ctrl.uartTxDatas[10] = 3;
			  uart4Ctrl.uartTxDatas[11] = 0xff;
			  uart4Ctrl.uartTxDatas[12] = 0xff;
			  uart4Ctrl.uartTxDatas[13] = finger_AutoIdentify_H;
        uart4Ctrl.uartTxDatas[14] = finger_AutoIdentify_L;
		}
		cmdLen = fingerCtrl.finger_package_len.shortData + len4_bit + len4_bit_num;
		fingerCtrl.finger_checkSum.shortData = getCheckSum_16Bit(uart4Ctrl.uartTxDatas,len4_bit - 1,cmdLen - 2);
		uart4Ctrl.uartTxDatas[cmdLen - 2] = fingerCtrl.finger_checkSum.charArrData[1];
		uart4Ctrl.uartTxDatas[cmdLen - 1] = fingerCtrl.finger_checkSum.charArrData[0];
	  		
//		#ifdef SYS_DEBUG
//		printf("   sendCmd  = ");
//		for(i = 0; i < cmdLen; i++){
//				printf(" %02x ",uart4Ctrl.uartTxDatas[i]);
//		}
//		printf("  \r\n  ");
//		#endif	  
		
		#if uart4_DMA_send > 0
		uart_DMA_sendDatas(UART4_DMA_Channel,UART4_DMA_FLAG_TC,uart4Ctrl.uartTxDatas,cmdLen);	
		#else
		uart_sendDatas(UART4_Id,uart4Ctrl.uartTxDatas,cmdLen);	
		#endif
		
}
	

// 获取各种指令数据

#endif

